/**
* Server
* 
* Se encarga del manejo central de los mensajes, asi como de la 
* autenticacion de los clientes. Todos los mensajes entre los clientes
* tienen como intermediario al servidor, quien luego lo reenvia a su 
* destino final. Esta siempre escuchando por nuevos clientes.
*/

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Hashtable;

public class Server{

    public static final String SERVERIP = "127.0.0.1";
    public static final int SERVERPORT = 4444;
    
    //Estructura para almacenar <id_de_usuario,ip_de_usuario>
    public static Hashtable <String, String> tablaIdIp = new Hashtable <String, String> ();
    static Hashtable <String, Integer> tablaConectados = new Hashtable <String, Integer> ();
    static Hashtable <String, String> tablaGPS = new Hashtable <String, String> ();
    static Hashtable <String, Socket> tablaUsuarioSocket = new Hashtable <String, Socket> ();
  
/*MAIN METHOD*/
    public static void main (String a[]) throws IOException {
        ServerSocket socketServidor = null;
		try {
            //Binding servidor-puerto
			socketServidor = new ServerSocket(SERVERPORT);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//Contador de clientes atendidos
		int contClientesAtendidos=0;
        String id_cliente;
        String ip_cliente;
        
tablaConectados.put("emilio",1);
tablaConectados.put("juan",1);
tablaConectados.put("guille",1);
        
        while(true){
		    System.out.println("S: Número de clientes atendidos: " + contClientesAtendidos++);
		    //contClientesAtendidos++;
		    /*
		     * Binding servidor-cliente
		     * Se establece la conexion con el cliente*/
		    Socket socketClient = socketServidor.accept();
		    String[] tokens = socketClient.toString().split("[,]");
		    String[] tmp = tokens;
		    tokens = tokens[0].split("[/]");
		    
		    /*Cliente con el que el servidor se ha conectado
		     * En las prox versiones id_cliente sera el nombre del cliente y no su ip*/
		    id_cliente = tokens[1];
		    ip_cliente = tokens[1];
		    tmp = tmp[1].split("[=]");
		    
		    /*
		     * Se almacena el nuevo cliente en la tabla central de usuarios 
		     * del servidor por ahora almacenamos "ip_cliente" de la izq, 
		     * como nombre del usuario*/
		    
		    tablaIdIp.put(id_cliente,ip_cliente);
		    //tablaConectados.put(id_cliente,1);
		    
		    Runnable nuevoCliente = new HiloDeCliente(ip_cliente, socketClient);
		    Thread hilo = new Thread(nuevoCliente);
		    hilo.start();	     
        }
    }
}
